上周利用spark sql统计mysql数据库中数据然后导入mysql的报表库中,遇到了一些时间处理的问题,记录一下mysql和spark sql处理不同。
最近30天处理
在spark sql中处理:1
date_sub(now(),30) <=create_time
在mysql处理:1
DATE_SUB(CURDATE(), INTERVAL 30 DAY) <=create_time
时间相差几天
在spark sql处理(和mysql一直):
1 | datediff(start_time,end_time)<1(天数) |
相差多少分钟
在spark sql先把两个时间转换时间戳,然后再除以60.利用unix_timestamp函数进行处理,下面是转换为秒
1 | unix_timestamp(a.depart_time)-unix_timestamp(a.enter_time) |
转换为年月日
在spark sql用date_format进行处理,注意想要####-##-##模式,格式一定要y-MM-dd,这样用时间排序才没有问题,如果是y-M-d,出现的日期格式,排序会有问题
1 | DATE_FORMAT(create_time, 'y-MM-dd') |
spark的视图
spark的视图创建非常方面,一般使用createOrReplaceTempView方法,创建视图,比如可以这样使用
1 | spark.sql("select * from |
利用视图可以把复杂嵌套的sql分解一个个视图,最后得到想要的结果
注意:视图不能全部数字,会报错。视图如果被使用过,需要重新创建。